package org.example.c4;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;

/**
 * @author liu-rui
 * @date 2020/6/8 下午4:22
 * @description 实践AtomicIntegerFieldUpdater
 * @since
 */
@Slf4j
public class Demo5 {
    public static void main(String[] args) {
        cls clazz = new cls();
        AtomicIntegerFieldUpdater<cls> updaterA = AtomicIntegerFieldUpdater.newUpdater(cls.class, "a");
        AtomicIntegerFieldUpdater<cls> updaterB = AtomicIntegerFieldUpdater.newUpdater(cls.class, "b");

        updaterA.set(clazz, 10);
        updaterB.set(clazz, 11);

        updaterA.getAndIncrement(clazz);
        updaterB.getAndIncrement(clazz);

        log.info("{}", clazz.toString());
    }

    @Data
    static class cls {
        volatile int a;//必须是volatile
        volatile int b;
    }
}
